Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


session.py HEAD (dac94b89) Text, 4.26 KB

T8b949e# nomadForum - a forum on the NomadNetwork
T8b949e# Copyright (C) 2023-2026 AutumnSpark1226
T8b949e#
T8b949e# This program is free software: you can redistribute it and/or modify
T8b949e# it under the terms of the GNU General Public License as published by
T8b949e# the Free Software Foundation, either version 3 of the License, or
T8b949e# (at your option) any later version.
T8b949e#
T8b949e# This program is distributed in the hope that it will be useful,
T8b949e# but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e# GNU General Public License for more details.
T8b949e#
T8b949e# You should have received a copy of the GNU General Public License
T8b949e# along with this program. If not, see <https://www.gnu.org/licenses/>.

Tff7b72import T7ee787string
Tff7b72import T7ee787uuid

Tff7b72import T7ee787main


Tff7b72class T56d364SessionTb4b4b4:
Te6edf3session_uuidTb4b4b4: Tffa657str
Te6edf3link_idTb4b4b4: Tffa657str
Te6edf3remote_identityTb4b4b4: Tffa657str

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3remote_identityTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tb4b4b4(
Tffa657lenTb4b4b4(Te6edf3link_idTb4b4b4) Tff7b72!= T79c0ff32
Tff7b72or Tff7b72not Tffa657setTb4b4b4(Te6edf3link_idTb4b4b4)Tff7b72.Td2a8ffissubsetTb4b4b4(Tffa657setTb4b4b4(Te6edf3stringTff7b72.Td2a8ffhexdigitsTb4b4b4)Tb4b4b4)
Tff7b72or Tb4b4b4(
Te6edf3remote_identity
Tff7b72and Tb4b4b4(
Tffa657lenTb4b4b4(Te6edf3remote_identityTb4b4b4) Tff7b72!= T79c0ff32
Tff7b72or Tff7b72not Tffa657setTb4b4b4(Te6edf3remote_identityTb4b4b4)Tff7b72.Td2a8ffissubsetTb4b4b4(Tffa657setTb4b4b4(Te6edf3stringTff7b72.Td2a8ffhexdigitsTb4b4b4)Tb4b4b4)
Tb4b4b4)
Tb4b4b4)
Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffsomething went wrong...Ta5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffclose_databaseTb4b4b4(Te6edf3write_changesTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink_id Tff7b72= Te6edf3link_id
Tff7b72selfTff7b72.Td2a8ffremote_identity Tff7b72= Te6edf3remote_identity
T8b949e# load already existing session or create a new one
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_logged_inTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsession_uuid Tff7b72= Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffSELECT session_uuid FROM sessions WHERE link_id = Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8fflink_idTffd700}Ta5d6ff'Ta5d6ff"
Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsession_uuid Tff7b72= Tffa657strTb4b4b4(Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcheck_remote_identityTb4b4b4(Te6edf3remote_identityTb4b4b4)

Tff7b72def Td2a8ffcheck_remote_identityTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3remote_identityTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhas_remote_identityTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3query_result Tff7b72= Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT username, remote_id FROM connections WHERE allow_login = 1 AND verified = 1Ta5d6ff"
Tb4b4b4)
Tff7b72for Te6edf3data Tff7b72in Te6edf3query_resultTb4b4b4:
Tff7b72if Te6edf3mainTff7b72.Td2a8ffdecryptTb4b4b4(Te6edf3dataTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3remote_identityTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbind_userTb4b4b4(Te6edf3mainTff7b72.Td2a8ffuser_id_from_usernameTb4b4b4(Te6edf3dataTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72break

Tff7b72def Td2a8ffis_logged_inTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72return Tb4b4b4(
Tffa657lenTb4b4b4(
Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffSELECT user_id FROM sessions WHERE link_id = Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8fflink_idTffd700}Ta5d6ff'Ta5d6ff"
Tb4b4b4)
Tb4b4b4)
Tff7b72== T79c0ff1
Tb4b4b4)

T8b949e# bind a user to this session
Tff7b72def Td2a8ffbind_userTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3user_idTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_logged_inTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tb4b4b4(
Tffa657lenTb4b4b4(
Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffSELECT enabled FROM users WHERE user_id = Tffd700{Te6edf3user_idTffd700}Ta5d6ff AND enabled = 1Ta5d6ff"
Tb4b4b4)
Tb4b4b4)
Tff7b72!= T79c0ff1
Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffuser disabled / does not exist, cannot proceedTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffINSERT INTO sessions (session_uuid, link_id, login_time, user_id) VALUES (Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8ffsession_uuidTffd700}Ta5d6ff'Ta5d6ff, Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8fflink_idTffd700}Ta5d6ff'Ta5d6ff, unixepoch(), Tffd700{Te6edf3user_idTffd700}Ta5d6ff)Ta5d6ff"
Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6fflink_id already bound to a sessionTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffdeleteTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# delete session from db
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffDELETE FROM sessions WHERE session_uuid = Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8ffsession_uuidTffd700}Ta5d6ff'Ta5d6ff"
Tb4b4b4)
T8b949e# get a new id
Tff7b72selfTff7b72.Td2a8ffsession_uuid Tff7b72= Tffa657strTb4b4b4(Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4)

Tff7b72def Td2a8ffget_user_idTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3query_result Tff7b72= Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffSELECT user_id FROM sessions WHERE session_uuid = Ta5d6ff'Tffd700{Tff7b72selfTff7b72.Td2a8ffsession_uuidTffd700}Ta5d6ff'Ta5d6ff"
Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3query_resultTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Te6edf3query_resultTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72elif Tffa657lenTb4b4b4(Te6edf3query_resultTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffnot logged inTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffmultiple sessions with the same id stored???Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffget_usernameTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3mainTff7b72.Td2a8ffusername_from_user_idTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_user_idTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffget_link_idTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8fflink_id

Tff7b72def Td2a8ffget_remote_identityTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffremote_identity

Tff7b72def Td2a8ffhas_remote_identityTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffget_remote_identityTb4b4b4(Tb4b4b4) Tff7b72!= Ta5d6ff"Ta5d6ff"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────